package com.bgy.common;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.jfinal.kit.PropKit;
import com.jfinal.kit.StrKit;
import com.jfinal.qyweixin.sdk.api.ApiConfig;
import com.jfinal.qyweixin.sdk.api.ApiResult;
import com.jfinal.qyweixin.sdk.api.OAuthApi;
import com.jfinal.qyweixin.sdk.jfinal.ApiController;


/**
 * 控制前端js调用，会议列表使用，为了实现企业会话功能
 * @author Administrator
 *
 */
public class QyMeetingListController extends ApiController {
	
	/**
	 * 如果要支持多公众账号，只需要在此返回各个公众号对应的  ApiConfig 对象即可
	 * 可以通过在请求 url 中挂参数来动态从数据库中获取 ApiConfig 属性值
	 */
	public ApiConfig getApiConfig() {
		ApiConfig ac = new ApiConfig();		
		// 配置微信 API 相关常量
		ac.setToken(PropKit.get("token"));
		ac.setCorpId(PropKit.get("corpId"));
		ac.setCorpSecret(PropKit.get("secret"));						
		/**
		 *  是否对消息进行加密，对应于微信平台的消息加解密方式：
		 *  1：true进行加密且必须配置 encodingAesKey
		 *  2：false采用明文模式，同时也支持混合模式
		 */
		ac.setEncryptMessage(PropKit.getBoolean("encryptMessage", false));
		ac.setEncodingAesKey(PropKit.get("encodingAesKey", "setting it in config file"));
		return ac;
	}	
		
	private void setOathCode(){
		String userId =null;
		String openid=null;
		if (!isParaBlank("code")) {
			String code = getPara("code");			
			ApiResult userInfoApiResult = OAuthApi.getUserInfoByCode(code);
			if (userInfoApiResult.isSucceed()) {
				String userInfoJson=userInfoApiResult.getJson();
				JSONObject object = JSON.parseObject(userInfoJson);
				try {
					userId = object.getString("UserId"); //如果获取userId为空 说明没有关注					
					if (userId!=null && !userId.equals("")) {
						ApiResult toOpenIdApiResult = OAuthApi.ToOpenId("{\"userid\":\""+userId+"\",\"agentid\":0}");
						if (toOpenIdApiResult.isSucceed()) {
							openid=JSON.parseObject(toOpenIdApiResult.getJson()).getString("openid");
						}
					}else {
						openid = object.getString("OpenId");
						String json="{\"openid\":\""+openid+"\"}"; //如果未关注 openid无法转化为userid						
						ApiResult toUserIdApiResult = OAuthApi.ToUserId(json);
						if (toUserIdApiResult.isSucceed()) {
							userId=JSON.parseObject(toUserIdApiResult.getJson()).getString("userid");
						}
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}						
			setAttr("openID", userId);			
		}
	}	
	
	public void index(){		
		setOathCode();
		String status = getPara("status");
		if (StrKit.isBlank(status)){
			status = "0";
		}
		setAttr("status", status);	
		renderJsp("meeting_list.jsp");
	}	
}
